var MenuTreePage = {
	onItemSelected:function(node){
		// Logger.info("你选中了节点，该节点的信息： "+JSON.stringify(node));
		$("#menuInfoFrm").autofill(node);
	},
	save:function(){
		Logger.debug("你正在保存菜单信息");
		// 如果没有选中一个节点，那么可以断定用户没有做任何修改
		var passForm=$("#menuInfoFrm").valid();
		if(!passForm){return;}
		var nodes = menuTree.getSelectedNodes();
		if(!nodes || nodes.length==0) {
			MsgBox.warn("在没有新增/修改菜单的情况下编辑的菜单信息是无效的，菜单信息将不会被修改");
			return ;
		}
		if(!MsgBox.preventViolentClick("saveMenuTree", "请不要频繁保存菜单信息", 500)){ // 阻止频发提交ajax
			var jsonArr = menuTree.getZTreeNodesToTemplates(); // 这个系统方法中调用了 onNodeConvertToTemplate 方法来进行转化
			Logger.info(jsonArr);
			saveMenuTreeAjax.setData($.toJSON(jsonArr));
			saveMenuTreeAjax.send();
		}
	},
	onSaveMenuTreeSucc:function(){
		MsgBox.info("保存成功！");
	},
	add:function(){
		var node = menuTree.addNode();
		node.resourceName="新节点";
		node.resourceString="";
		node.priority="";
		node.resourceDesc="";
		node.enabled="1";
		node.resourceExt=node.pId;
		$("#menuInfoFrm").autofill(node);
	},
	remove:function(){
		var node = menuTree.getCurrentNode();
		if(node == null ){ // 未选中节点时
			MsgBox.info("请选择一个菜单节点","提示");
		}else {
			var url = removeMenuNodeAjax.url;
			if(node.id){
				removeMenuNodeAjax.url += ("/"+node.id);
			}
			removeMenuNodeAjax.send();
			removeMenuNodeAjax.url = url;
		}
	},
	onRemoveMenuNodeSucc:function(){
		var node = menuTree.getCurrentNode();
		menuTree.removeNode(node);
		MsgBox.info("删除成功！");
	},
	// 将ztree的节点转化为你所想要的节点类型并返回，当后台需要的数据结构与node节点的数据结构不一致时，
	// 强烈建议在这个方法里面构造后台需要的数据
	onNodeConvertToTemplate:function(node,index){
		// Logger.info("onNodeConvertToTemplate ---->"+JSON.stringify(node));
		var template = new Object();
		var tempAttributes = new Object();
		tempAttributes.enabled=1; // menuTree.jsp中的“是否启用”选项只是做做样子，因为设置成了disabled，
				// $("#menuInfoFrm").serializeObject() 获取不到所有设置了disabled='disabled'属性的表单值
		tempAttributes.issys=node.issys;
		tempAttributes.priority=node.priority || (parseInt(index)+1); // 默认为系统默认
		tempAttributes.resourceExt=node.resourceExt;
		tempAttributes.resourceExt1=node.resourceExt1;
		tempAttributes.resourceId=node.resourceId;
		tempAttributes.resourceDesc = node.resourceDesc;
		tempAttributes.enabled = node.enabled;
		tempAttributes.resourceName=$.trim(node.resourceName) || '新节点'; // 默认为'新节点'
		tempAttributes.resourceString=$.trim(node.resourceString) || "/"; // 这儿设置默认值为/
		tempAttributes.resourceType='menu';
		template.attributes = $.toJSON(tempAttributes);
		template.id = node.id;
		template.text = node.text;
		template.pid = node.pid;
		return template;
	}
};

var MenuTreeInfoPage = {
	onNodeInfoChanged:function(){
		var currentNode = menuTree.getCurrentNode();
		
		// $("#menuInfoFrm").serializeObject() 获取不到所有设置了disabled='disabled'属性的表单值
		var frmNode = $("#menuInfoFrm").serializeObject(); // 将表单中的数据转为javascript object
		if(currentNode) {
			currentNode.text=frmNode.resourceName; // 需要指明node.name的值，node.name是对应ztree节点的中文名称的属性
						// resourceName是用户菜单（form表单）中定义的中文名称属性，若两者属性定义相同时，可省略这一行，否则需要做此赋值
			Object.assign(currentNode,frmNode); // 将frmNode中存在的属性赋值到currentNode上
			// Logger.info(JSON.stringify(menuTree));
			// Logger.info("current node = "+JSON.stringify(currentNode));
			menuTree.updateNode(currentNode,true);
		}
	}
};
function onPageLoad(){
	Logger.debug("menuTree.js => onPageLoad method");
	$("#menuInfoFrm").validate({ 
	      //表单对应验证属性
        rules: {  
        	resourceName: {  
                required:true,  
            },  
            resourceString: {
                required: true,  
            },
            priority:{
            	digits:true,	
            }
        },  
		errorClass:"has-error",
		//验证不通过，element：对应验证节点，error：错误信息节点的提示信息
  		errorPlacement: function(error, element) {
  			var currentNode = menuTree.getCurrentNode();
  			Logger.debug("menuTree.js => currentNode => " + JSON.stringify(currentNode));
  			if(currentNode) {
	  			 element.closest('div.form-group').addClass("has-error");
	  		     element.closest('div.form-group').append(error);
  			}
  		},
  	    //验证通过，label：信息节点的提示信息
  		success:function(label) {
  			var currentNode = menuTree.getCurrentNode();
  			Logger.debug("menuTree.js => currentNode => " + JSON.stringify(currentNode));
  			if(currentNode) {
	  			label.removeClass("has-error");
	  		    label.closest('div.form-group').removeClass("has-error");
  			}
  		}
	});
}